﻿using System;
using System.Collections.Generic;
using System.Text;

namespace Sinacor.Servico.Bovespa.Corretagem.Service.ServiceImplementation.Translator.DataContractToBusinessEntity
{
    public class Taxa
    {
        #region [PUB] ToChaveTaxa
        public BusinessEntity.ChaveTaxa ToChaveTaxa(DataContract.Request.ChaveTaxaRequest from)
        {
            BusinessEntity.ChaveTaxa chavetaxa;
            if (from == null)
                return null;
            else
            {
                chavetaxa =  new BusinessEntity.ChaveTaxa();

                chavetaxa.Cliente = (BusinessEntity.Enum.TipoCliente)from.Cliente;
                chavetaxa.CodigoBolsa = from.CodigoBolsa;
                chavetaxa.Liquidacao = (BusinessEntity.Enum.TipoLiquidacao)from.Liquidacao;

                chavetaxa.Mercado = from.Mercado;
                chavetaxa.MercadoOrigem = from.MercadoOrigem;
                chavetaxa.NaturezaOperacao = (BusinessEntity.Enum.TipoNaturezaOperacao)from.NaturezaOperacao;

                chavetaxa.Operacao = (BusinessEntity.Enum.TipoOperacao)from.Operacao;
                chavetaxa.Papel = (BusinessEntity.Enum.TipoPapel)from.Papel;

                if(from.Periodo != null)
                {
                    chavetaxa.Periodo =  new BusinessEntity.Periodo{
                                                        DataInicial = from.Periodo.DataInicial,
                                                        DataFinal  = from.Periodo.DataFinal
                                                        };
                }                
            }
            return chavetaxa;
        }
        
        public List<BusinessEntity.ChaveTaxa> ToChaveTaxa(List<DataContract.Request.ChaveTaxaRequest> from)
        {
            if (from == null) return null;

            List<BusinessEntity.ChaveTaxa> retorno = new List<BusinessEntity.ChaveTaxa>();
            
            BusinessEntity.ChaveTaxa chavetaxa;

            foreach (DataContract.Request.ChaveTaxaRequest item in from)
            {
                chavetaxa = new BusinessEntity.ChaveTaxa();

                chavetaxa.Cliente = (BusinessEntity.Enum.TipoCliente)item.Cliente;
                chavetaxa.CodigoBolsa = item.CodigoBolsa;
                chavetaxa.Liquidacao = (BusinessEntity.Enum.TipoLiquidacao)item.Liquidacao;

                chavetaxa.Mercado = item.Mercado;
                chavetaxa.MercadoOrigem = item.MercadoOrigem;
                chavetaxa.NaturezaOperacao = (BusinessEntity.Enum.TipoNaturezaOperacao)item.NaturezaOperacao;

                chavetaxa.Operacao = (BusinessEntity.Enum.TipoOperacao)item.Operacao;
                chavetaxa.Papel = (BusinessEntity.Enum.TipoPapel)item.Papel;

                if (item.Periodo != null)
                {                    
                    chavetaxa.Periodo = new BusinessEntity.Periodo{
                                    DataInicial = item.Periodo.DataInicial,
                                    DataFinal = item.Periodo.DataFinal
                                };
                }  
                retorno.Add(chavetaxa);
            }
            return retorno;
        }
        #endregion

        #region [PUB] ToFiltroTaxa
        public BusinessEntity.Parameter.FiltroTaxa ToFiltroTaxa(DataContract.Request.FiltroTaxaRequest from)
        {
            BusinessEntity.Parameter.FiltroTaxa filtrotaxa;
            if (from == null)
                return null;
            else
            {
                filtrotaxa = new BusinessEntity.Parameter.FiltroTaxa();

                filtrotaxa.Bolsa = from.Bolsa;                
                filtrotaxa.Mercado = from.Mercado;
                filtrotaxa.MercadoOrigem = from.MercadoOrigem;

                if (from.NaturezaOperacao != null)
                    filtrotaxa.NaturezaOperacao = (BusinessEntity.Enum.TipoNaturezaOperacao)from.NaturezaOperacao;
                
                if (from.Periodo != null)
                {
                    filtrotaxa.Periodo = new BusinessEntity.Periodo{
                                                DataInicial = from.Periodo.DataInicial,
                                                DataFinal = from.Periodo.DataFinal
                                            };
                }
            }
            return filtrotaxa;
        }
        
        public static List<BusinessEntity.Parameter.FiltroTaxa> ToFiltroTaxa(List<DataContract.Request.FiltroTaxaRequest> from)
        {
            if (from == null) return null;

            List<BusinessEntity.Parameter.FiltroTaxa> retorno = new List<BusinessEntity.Parameter.FiltroTaxa>();

            BusinessEntity.Parameter.FiltroTaxa filtrotaxa;

            foreach (DataContract.Request.FiltroTaxaRequest item in from)
            {
                filtrotaxa = new BusinessEntity.Parameter.FiltroTaxa();

                filtrotaxa.Bolsa = item.Bolsa;
                filtrotaxa.Mercado = item.Mercado;
                filtrotaxa.MercadoOrigem = item.MercadoOrigem;

                filtrotaxa.NaturezaOperacao = (BusinessEntity.Enum.TipoNaturezaOperacao?)item.NaturezaOperacao;


                if (item.Periodo != null)
                {
                    filtrotaxa.Periodo = new BusinessEntity.Periodo{
                                        DataInicial = item.Periodo.DataInicial,
                                        DataFinal = item.Periodo.DataFinal
                                    };
                }
                        
                retorno.Add(filtrotaxa);
            }
            return retorno;
        }
        #endregion

        #region [PUB] ToTaxa
        public BusinessEntity.Taxa ToTaxa(DataContract.Request.TaxaRequest from)
        {
            BusinessEntity.Taxa taxa;
            if (from == null)
                return null;
            else
            {
                taxa = new BusinessEntity.Taxa();

                taxa.Cliente = (BusinessEntity.Enum.TipoCliente)from.Cliente;
                taxa.CodigoBolsa = from.CodigoBolsa;
                taxa.Liquidacao = (BusinessEntity.Enum.TipoLiquidacao)from.Liquidacao;

                taxa.Mercado = from.Mercado;
                taxa.MercadoOrigem = from.MercadoOrigem;
                taxa.NaturezaOperacao = (BusinessEntity.Enum.TipoNaturezaOperacao)from.NaturezaOperacao;

                taxa.NomeBolsa = from.NomeBolsa;
                taxa.NomeMercado = from.NomeMercado;
                taxa.NomeMercadoOrigem = from.NomeMercadoOrigem;

                taxa.Operacao = (BusinessEntity.Enum.TipoOperacao)from.Operacao;
                taxa.Papel = (BusinessEntity.Enum.TipoPapel)from.Papel;

                taxa.PercEmoluentoBovespa = from.PercEmoluentoBovespa;
                taxa.PercEmoluentoCBLC = from.PercEmoluentoCBLC;
                taxa.PercRegistroBovespa = from.PercRegistroBovespa;

                taxa.PercRegistroCBLC = from.PercRegistroCBLC; 

                if (from.Periodo != null)
                {
                    taxa.Periodo = new BusinessEntity.Periodo{
                                        DataInicial = from.Periodo.DataInicial,
                                        DataFinal = from.Periodo.DataFinal
                                    };
                }
                
            }
            return taxa;
        }
       
        public List<BusinessEntity.Taxa> ToTaxa(List<DataContract.Request.TaxaRequest> from)
        {            
            List<BusinessEntity.Taxa> retorno = new List<BusinessEntity.Taxa>();
            if (from == null)
                return null;
            else
            {
                BusinessEntity.Taxa taxa;
                foreach (DataContract.Request.TaxaRequest item in from)
                {
                    taxa = new BusinessEntity.Taxa();

                    taxa.Cliente = (BusinessEntity.Enum.TipoCliente)item.Cliente;
                    taxa.CodigoBolsa = item.CodigoBolsa;
                    taxa.Liquidacao = (BusinessEntity.Enum.TipoLiquidacao)item.Liquidacao;

                    taxa.Mercado = item.Mercado;
                    taxa.MercadoOrigem = item.MercadoOrigem;
                    taxa.NaturezaOperacao = (BusinessEntity.Enum.TipoNaturezaOperacao)item.NaturezaOperacao;

                    taxa.NomeBolsa = item.NomeBolsa;
                    taxa.NomeMercado = item.NomeMercado;
                    taxa.NomeMercadoOrigem = item.NomeMercadoOrigem;

                    taxa.Operacao = (BusinessEntity.Enum.TipoOperacao)item.Operacao;
                    taxa.Papel = (BusinessEntity.Enum.TipoPapel)item.Papel;

                    taxa.PercEmoluentoBovespa = item.PercEmoluentoBovespa;
                    taxa.PercEmoluentoCBLC = item.PercEmoluentoCBLC;
                    taxa.PercRegistroBovespa = item.PercRegistroBovespa;

                    taxa.PercRegistroCBLC = item.PercRegistroCBLC;

                    if (item.Periodo != null)
                    {
                        taxa.Periodo = new BusinessEntity.Periodo{
                                                DataInicial = item.Periodo.DataInicial,
                                                DataFinal = item.Periodo.DataFinal
                                            };
                    }
                    retorno.Add(taxa);
                }

            }
            return retorno;
        }
        #endregion
               
    }
}
